package cn.iocoder.yudao.module.bk.service.lwbook;

import java.util.*;
import java.time.LocalDateTime;
import javax.validation.*;

import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bk.controller.admin.lwbook.vo.*;
import cn.iocoder.yudao.module.bk.controller.admin.lwbookinapply.vo.LwBookInApplyRes;
import cn.iocoder.yudao.module.bk.controller.admin.lwbookoutapply.vo.LwBookOutApplyRes;
import cn.iocoder.yudao.module.bk.controller.app.vo.*;
import cn.iocoder.yudao.module.bk.dal.dataobject.lwbook.LwBookDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * 来往书籍 Service 接口
 *
 * @author qy
 */
public interface LwBookService {

    /**
     * 创建来往书籍
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createLwBook(@Valid LwBookSaveReqVO createReqVO);

    /**
     * 更新来往书籍
     *
     * @param updateReqVO 更新信息
     */
    void updateLwBook(@Valid LwBookSaveReqVO updateReqVO);

    /**
     * 删除来往书籍
     *
     * @param id 编号
     */
    void deleteLwBook(Long id);

    /**
     * 获得来往书籍
     *
     * @param id 编号
     * @return 来往书籍
     */
    LwBookDO getLwBook(Long id);

    /**
     * 获得来往书籍分页
     *
     * @param pageReqVO 分页查询
     * @return 来往书籍分页
     */
    PageResult<LwBookDO> getLwBookPage(LwBookPageReqVO pageReqVO);

    /**
     * 获得可借阅书籍分页列表
     *
     * @param pageReqVO 分页查询
     * @return 来往书籍分页
     */
    PageResult<LwBookDO> getInLwBookPage(LwBookPageReqVO pageReqVO);

    /**
     * 当前状态
     *
     * @return 结果
     */
    CommonResult<HomeInfoRes> nowInfo();

    /**
     * 新增书籍飘入
     *
     * @param req 请求
     * @return 结果
     */
    CommonResult<?> bookInApply(PutBookInReq req);

    /**
     * 新增书籍飘出
     *
     * @param req 请求
     * @return 结果
     */
    CommonResult<?> bookOutApply(PutBookOutReq req);

    /**
     * 我的飘入申请
     *
     * @return 结果
     */
    CommonResult<List<LwBookInApplyRes>> myInApplies();

    /**
     * 我的飘出申请
     *
     * @return 结果
     */
    CommonResult<List<LwBookOutApplyRes>> myOutApplies();

    /**
     * isbn查询
     *
     * @return 结果
     */
    CommonResult<BookInfoReq> isbnSearch(IsbnReq req);


    /**
     * isbn查询
     *
     * @return 结果
     */
    CommonResult<BookInfoReq> isbnSearchByApi(IsbnReq req);



    /**
     * 最新入口
     *
     * @return 结果
     */
    CommonResult<List<NewBookRes>> newBooks();

    /**
     * 最新入口
     *
     * @param req 请求体
     * @return 结果
     */
    CommonResult<StatisDataRes> statisData(StatisDataReq req);

    /**
     * 获取指定时间范围内每天新增书籍数量的图表数据
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 图表数据
     */
    MemberUserApi.ChartData getNewBookChartData(LocalDateTime startTime, LocalDateTime endTime);


}
